package com.jdbc;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

/**反射案例**/
public class ReflectDemo {
    public static void main(String[] args) throws Exception {
        //获得Class对象
        Class aclass = Student.class;
        //创建对象，调用无参构造方法 newInstance()
        Student student = (Student) aclass.newInstance();
        System.out.println(student);
        //读取类中所有的方法
        Method[] methods = aclass.getDeclaredMethods();
        for (Method method : methods){
            System.out.println(method);
        }
        //读取setName方法 getDeclaredMethod 参数1，方法名，参数2，参数类型
        Method setName = aclass.getDeclaredMethod("setName", String.class);
        //对象.方法（参数）-->方法.invoke(对象，参数)
        setName.invoke(student,"张三");
        System.out.println(student);
        //读取类中所有的属性
        Field[] fields = aclass.getDeclaredFields();
        for (Field field : fields){
            System.out.println(field.getType()+" "+field.getName());
        }
        //获得age属性
        Field age = aclass.getDeclaredField("age");
        //修改属性访问权限
        age.setAccessible(true);
        //通过get、set方法读写属性的值 属性.set(对象，值)
        age.set(student,28);
        System.out.println(student);
    }
}
